package Stack;

/**
 * Interfaz generica de estructura de datos Stack LIFO
 * @param <E>  clase generica
 * @author Vinicio Gomez
 * @since 12/08/2012
 * @version 1.0
 */
public interface Stack <E>{
    /**
     * Ingresa un objeto al inicio de la pila
     * @param item objeto a ingresar
     * @pre n/a
     * @post el objeto es agregado
     * @since 12/08/2012
     */
    public void push(E item);
    
    /**
     * Saca el ultimo objeto agregado a la pila
     * @return el ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post el ultimo objeto agregado a la pila es removido de la misma
     * @since 12/08/2012
     */
    public E pop();
    
    /**
     * Se obtiene la referencia del ultimo objeto agregado a la pila
     * @return la referencia del ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post se retorna la referencia del ultimo objeto agregado a la pila
     * @since 12/08/2012
     */
    public E peek();
    
    /**
     * Se determina si la pila esta vacia
     * @return verdadero si y solo si la pila esta vacia
     * @pre n/a
     * @post se retorna verdadero si y solo si la pila esta vacia
     * @since 12/08/2012
     */
    public boolean isEmpty();
    
    /**
     * Se determina la cantidad de objetos dentro de la pila
     * @return la cantidad de objetos dentro de la pila
     * @pre n/a
     * @post se retorna la cantidad de objetos dentro de la pila
     */
    public int size();
    
}
